iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
自我挑戰組

自我挑戰系列 第 5

#04 pod.yaml

  • 分享至 

  • xImage
  •  
  • Kubernetes 中的 Pod 是容器編排的基本單位,它可以包含一個或多個容器,並提供了一個獨立的、可擴展的運作環境。

基本元件

一個典型的 Pod YAML 檔案由以下幾個關鍵元素組成:

apiVersion: v1
kind: Pod
metadata:
   name: my-pod
spec:
   containers:
     - name: container-1
       image: nginx:latest
     - name: container-2
       image: busybox:latest
  • apiVersion: 表示使用的 Kubernetes API 版本,通常為 v1。
  • kind: 指定了資源類型,這裡有一個 Pod。
  • metadata: 包含有關 Pod 的 raw data,包括名稱、標籤等。
  • spec: 包含了 Pod 的規範,其中定義了容器的配置。

架構組成

容器

在 spec 部分中,您可以定義 Pod 包含的容器。 Pod 可以包含一個或多個容器,通常用於運行共享資源或協作工作的容器。 每個容器都應該有一個唯一的名稱、要使用的容器映像和其他配置。

containers:
   - name: container-1
     image: nginx:latest
   - name: container-2
     image: busybox:latest

重啟策略

我們可以定義 Pod 的重新啟動策略,以指定容器在退出後是否應該重新啟動。 預設情況下,Pod 的重新啟動策略為 Always,即容器將在退出時自動重新啟動。 您也可以選擇 OnFailure 或 Never 作為重新啟動策略。

restartPolicy: Always

網路

Pod 有自己的 IP 位址和連接 port 空間。 您可以定義容器的 port mapping,以允許外部存取容器。 此外,Kubernetes 提供了各種網路插件(如 Calico、Flannel、Cilium 等),以實現不同網路拓撲和策略。

ports:
   - containerPort: 80

撰寫注意事項

在編寫 Pod 的 YAML 檔案時,有一些重要注意事項需要考慮:

container image

  • 使用可信任的容器映像,避免使用未經驗證的或過時的映像。
  • 明確指定容器映像的標籤,以確保容器在更新時具有一致的行為。

資源限制和要求

  • 配置容器的資源限制和要求,以避免資源爭用和提高叢集的穩定性。
resources:
   limits:
     cpu: "0.5"
     memory: "512Mi"
   requests:
     cpu: "0.2"
     memory: "256Mi"
安全性
  • 考慮容器的安全性,限制容器的權限,使用非特權用戶,配置安全性上下文等。
  • 使用 Kubernetes 的 Network Policies 來定義網路策略,確保 Pod 之間的通訊是安全的。

儲存

  • 如果容器需要持久化存儲,可以配置 PersistentVolume 和 PersistentVolumeClaim 來滿足儲存需求。
  • 確保容器中的資料不會因 Pod 的重新調度而遺失。

最佳實踐

以下是編寫 Pod YAML 檔案時的最佳做法:

  • 使用聲明式設定: 盡量使用聲明式設定而非命令式設定。 這樣可以更好地版本控制和自動化管理。
  • 分層應用: 將不同功能的容器分割成多個 Pod,並使用 Service 和 Ingress 控制流量。 這有助於應用程式的可擴展性和維護。
  • 使用標籤和選擇器: 使用標籤和選擇器來組織和管理 Pod,以便於篩選和操作 Pod。
  • 文件化: 在 YAML 文件中提供足夠的註解和文檔,以幫助團隊理解配置和用途。
  • 測試與驗證: 在應用程式部署之前,透過使用 kubectl apply 指令並執行 kubectl describe 指令來測試和驗證設定是否正確。
  • 監控和日誌: 設定監控和日誌記錄,以便追蹤 Pod 的效能和行為。 可使用工具如 Prometheus、Grafana、ELK Stack 等。

上一篇
#03 Containers
下一篇
#05 deployment.yaml
系列文
自我挑戰9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言